﻿using System;
using System.Collections.Generic;
using System.Text;
using Dapr.Client;
using System.Threading.Tasks;
using System.Threading;
using Google.Protobuf;

namespace Samples.Client;

public class StateStoreBinaryExample : Example
{

    private static readonly string stateKeyName = "binarydata";
    private static readonly string storeName = "statestore";

    public override string DisplayName => "Using the State Store with binary data";

    public override async Task RunAsync(CancellationToken cancellationToken)
    {
        using var client = new DaprClientBuilder().Build();

        var state = "Test Binary Data";
        // convert variable in to byte array
        var stateBytes = Encoding.UTF8.GetBytes(state);
        await client.SaveByteStateAsync(storeName, stateKeyName, stateBytes.AsMemory(), cancellationToken: cancellationToken);
        Console.WriteLine("Saved State!");

        var responseBytes = await client.GetByteStateAsync(storeName, stateKeyName, cancellationToken: cancellationToken);
        var savedState = Encoding.UTF8.GetString(ByteString.CopyFrom(responseBytes.Span).ToByteArray());
          
        if (savedState == null)
        {
            Console.WriteLine("State not found in store");
        }
        else
        {
            Console.WriteLine($"Got State: {savedState}");
        }

        await client.DeleteStateAsync(storeName, stateKeyName, cancellationToken: cancellationToken);
        Console.WriteLine("Deleted State!");
    }

       
}